#ifndef TIMERBOXES_H_JM_20120928
#define TIMERBOXES_H_JM_20120928

#include "../RootBox.h"

namespace jm4bbx {

	//struct StartTimerBoxDescriptor {
	//	//static const char* BOX_ID; 
	//};

	/**
	 * Box spustajuci meranie casu vypoctu v modele. Box pracue s vstupnymi a 
	 * vystupnymi signalmi zdedenymi od rodica {@link Box}. Pre spustenie 
	 * stopiek caka na vsetky vstupne signaly a okamzite po spusteni odosle 
	 * vsetky vystupne signaly. Opakovane spustenie boxu sposobi zresetovanie 
	 * stopiek. To znamena ze meranie prebieha vzdy od momentu vykonania prace
	 * boxu. Pre zistenie stavu stopiek je potrebne pouzit iny box, ktory
	 * vycita stav a niekde ho zapise (napr. {@see TiemrReportBox}).
	 **/
	class  StartTimerBox : public Box/*<StartTimerBoxDescriptor>*/ {
	public:
		StartTimerBox(bobox::box_id_type id, bobox::box_tid_type tid, 
			bobox::request *req, const bobox::parameters &params) 
			: Box(id, tid, req, params) { }

		virtual void initImpl() override;

		virtual void sync_mach_etwas() override;
	};


	//struct TimerReportBoxDescriptor {
	//	//static const char* BOX_ID; 
	//};

	/**
	 * Box zobrazujuci na standardny vystup cas ubehnuty od spustenia stopiek.
	 * K spusteniu stopiek je potrebne pouzit iny box (napr. 
	 * {@link StartTimerBox}). Box pracuje so signalmi zdedenymi od rodica 
	 * {@link Box}. Pre vypis stavu stopiek caka na vsetky vstupne signaly a 
	 * nasledne po vypise odosle vsetky vystupne signaly. Po vypise opat caka na 
	 * vstupne signaly pre pripadny opakovany vypis.
	 **/
	class  TimerReportBox : public Box/*<TimerReportBoxDescriptor>*/ {
	public:
		TimerReportBox(bobox::box_id_type id, bobox::box_tid_type tid, 
			bobox::request *req, const bobox::parameters &params) 
			: Box(id, tid, req, params) { }

		virtual void initImpl() override;

		virtual void sync_mach_etwas() override;
	};
} // namespace jm4bbx


#endif
